package com.ccp.dev.system.service;

import com.ccp.dev.core.basic.base.BaseService;
import com.ccp.dev.core.basic.util.ContextUtil;
import com.ccp.dev.core.util.BeanUtils;
import com.ccp.dev.core.util.StringUtil;
import com.ccp.dev.system.dao.PositionDao;
import com.ccp.dev.system.model.Position;
import com.ccp.dev.system.model.SysOrg;
import com.ccp.dev.system.model.UserPosition;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 系统岗位表，实际是部门和职务的对应关系表 Service类
 * @author y
 */
@Service
public class PositionService extends BaseService<Position> {
	@Resource
	private PositionDao positionDao;
	@Resource
	private UserPositionService userPositionService;
	@Resource
	private SysOrgService sysOrgService;


	/**
	 * 根据组织id 获取pos列表包含组织
	 * @param orgId 组织id
	 * @param userId 用户id
	 * @return list
	 */
	public List<Map> queryOrgPos(String userId , String orgId){
		List retList;
		if (StringUtil.isEmpty(userId)) {
			if (StringUtil.isEmpty(orgId)) {
				String currOrgId = ContextUtil.getCurrentOrgId();
				retList = this.positionDao.queryOrgPos(currOrgId);
			} else {
				retList = this.positionDao.queryOrgPos(orgId);
			}
		} else {
			SysOrg sysOrg = this.sysOrgService.getOrgByUserId(userId);
			retList= this.positionDao.queryOrgPos(sysOrg.getOrgId());
		}
		return retList;
	}

	/**
	 * 根据用户ID获取默认的的岗位。
	 * @param userId
	 * @return
	 */
	public Position getDefaultPosByUserId(String userId) {
		List<UserPosition> list = userPositionService.queryByUserId(userId);
		String posId = "";
		// 个人不属于任何一个部门。
		if (BeanUtils.isEmpty(list)){
			return null;
		}
		if (list.size() == 1) {
			posId = list.get(0).getPosId();
		} else {
			// 获取主要的组织。
			for (UserPosition userPosition : list) {
				if (userPosition.getIsPrimary().equals(UserPosition.PRIMARY_YES)) {
					posId = userPosition.getPosId();
					break;
				}
			}
			// 没有获取到主组织，从列表中获取一个组织作为当前组织。
			if (StringUtil.isEmpty(posId)){
				posId = list.get(0).getPosId();
			}
		}
		if("".equals(posId)){
			return null;
		}
		return this.positionDao.getById(posId);
	}

	/**
	 * 根据组织id删除组织下岗位
	 * @param orgId 组织id
	 */
	public void delByOrgId(String orgId) {
		positionDao.delByOrgId(orgId);
	}

	/**
	 * 根据用户id获取岗位列表
	 * @param  userId
	 * @return 返回position集合list
	 */
	public List<Position> queryByUserId(String userId){
		return positionDao.queryByUserId(userId);
	}

	/**
	 * 根据岗位名称获得岗位信息
	 * @param name
	 * @return
	 */
    public List<Position> queryByPosName(String name) {
    	return positionDao.queryByPosName(name);
    }
}
